/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package estsapp.controladores.ABMDemandasHistorica;

import autocompletar.logica.ModeloAutoCompletar;
import estsapp.controladores.Controlador;
import estsapp.controladores.ControladorPrincipal;
import estsapp.controladores.FabricaControladores;
import estsapp.entidades.Demanda;
import estsapp.entidades.ProductoTerminado;
import estsapp.expertos.ExpertoABMProductoTerminado;
import estsapp.expertos.ExpertoDemanda;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import persistencia.Conexion;
import persistencia.exceptions.ExcepcionFachada;

/**
 *
 * @author Juan
 */
public class ControladorABMDemandasHistoricas implements Controlador {

    PantallaABMDemandasHistoricas pantalla;
    PantallaDemandaJDialog pantallaDemandaJDialog;
    ExpertoDemanda experto;
    ExpertoABMProductoTerminado expertoProductos;
    ModeloTablaDemandas modeloTabla;
    ProductoTerminado productoTerminado;
    Demanda nuevaDemanda;
    private boolean iniciado;

    public ControladorABMDemandasHistoricas() {
        pantalla = new PantallaABMDemandasHistoricas();
        pantallaDemandaJDialog = new PantallaDemandaJDialog(null, true);
        experto = new ExpertoDemanda();
        expertoProductos = new ExpertoABMProductoTerminado();
        modeloTabla = new ModeloTablaDemandas();
        pantalla.getTablaDemandas().setModel(modeloTabla);

        cargarBotones();
        cargarBotonesJDialog();
        pantalla.getAutoCompletarProducto().setModelo(new ModeloAutoCompletar(expertoProductos.buscarProductosTerminados()));

        pantallaDemandaJDialog.getBtnGuardar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                guardar();
            }
        });
    }

    @Override
    public JInternalFrame getPantalla() {
        return pantalla;
    }

    @Override
    public void iniciar() {
        if (!iniciado) {
            ((ControladorPrincipal) FabricaControladores.getInstance().getControlador(FabricaControladores.controladoresNombre.PRINCIPAL)).agregarPantallaInterna(pantalla);
            iniciado = true;
        } else {
            pantalla.toFront();
            pantalla.setVisible(true);
        }

    }

    private void cargarBotones() {
        pantalla.getBtnNuevo().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                nuevo();
            }
        });


        pantalla.getBtnSalir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pantalla.setVisible(false);
            }
        });

        pantalla.getBotonMostrar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                mostrarDemanda();
            }
        });


    }

    private void nuevo() {
        limpiarCamposJDialog();
        pantallaDemandaJDialog.setVisible(true);
    }

    private void cargarBotonesJDialog() {
        pantallaDemandaJDialog.getBtnSalirJdialog().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                pantallaDemandaJDialog.setVisible(false);
            }
        });
        pantallaDemandaJDialog.getBtnGuardar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                guardar();
            }
        });
    }

    private void limpiarCamposJDialog() {
        pantallaDemandaJDialog.getTextoCantidad().setText("");
    }

    private void mostrarDemanda() {
        productoTerminado = (ProductoTerminado) pantalla.getAutoCompletarProducto().getItemSeleccionado();
        if (productoTerminado != null) {
            ((ModeloTablaDemandas) pantalla.getTablaDemandas().getModel()).setListaElementos(productoTerminado.getHistoricoDemanda());

        } else {
            JOptionPane.showMessageDialog(null, "Busque producto");
        }
    }

    private void guardar() {
        if (productoTerminado == null) {
            productoTerminado = (ProductoTerminado) pantalla.getAutoCompletarProducto().getItemSeleccionado();
        }

        if (!pantallaDemandaJDialog.getTextoCantidad().getText().equals("")) {
            nuevaDemanda = new Demanda();
            nuevaDemanda.setAnio(pantallaDemandaJDialog.getAnio().getYear());
            nuevaDemanda.setMes(pantallaDemandaJDialog.getMes().getMonth());
            nuevaDemanda.setCantidad(Float.valueOf(pantallaDemandaJDialog.getTextoCantidad().getText()));
            productoTerminado.getHistoricoDemanda().add(nuevaDemanda);
            try {
                Conexion.getInstancia().iniciarTX();
                experto.guardarDemandaMateriales(productoTerminado, nuevaDemanda);
                Conexion.getInstancia().confirmarTx();
            } catch (ExcepcionFachada ex) {
                Conexion.getInstancia().deshacerTx();

            }
            
            mostrarDemanda();

        } else {
            JOptionPane.showMessageDialog(null, "Ingrese cantidad");
        }
        limpiarCamposJDialog();
    }
}
